﻿/*
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
 *
 * == BEGIN LICENSE ==
 *
 * Licensed under the terms of any of the following licenses at your
 * choice:
 *
 *  - GNU General Public License Version 2 or later (the "GPL")
 *    http://www.gnu.org/licenses/gpl.html
 *
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 *    http://www.gnu.org/licenses/lgpl.html
 *
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 *    http://www.mozilla.org/MPL/MPL-1.1.html
 *
 * == END LICENSE ==
 *
 * Scripts related to the Flash dialog window (see fck_flash.html).
 */

var dialog = window.parent;
var oEditor = dialog.InnerDialogLoaded();
var FCK = oEditor.FCK;
var FCKLang = oEditor.FCKLang;
var FCKConfig = oEditor.FCKConfig;
var FCKTools = oEditor.FCKTools;

function WinPlayer(url) {

	var r, re;

	re = /.(avi|wmv|asf|wma|mid|mp3|mpg)$/i;

	r = url.match(re);

	return r;

}

function RealPlayer(url) {

	var r, re;

	re = /.(.rm|.ra|.rmvb|ram)$/i;

	r = url.match(re);

	return r;

}

function QuickTime(url) {

	var r, re;

	re = /.(mov|qt)$/i;

	r = url.match(re);

	return r;

}

function FlashPlayer(url) {

	var r, re;

	re = /.swf$/i;

	r = url.match(re);

	return r;
}
// #### Dialog Tabs

// Set the dialog tabs.
dialog.AddTab('Info', oEditor.FCKLang.DlgInfoTab);

if (FCKConfig.FlashUpload)
	dialog.AddTab('Upload', FCKLang.DlgLnkUpload);

if (!FCKConfig.FlashDlgHideAdvanced)
	dialog.AddTab('Advanced', oEditor.FCKLang.DlgAdvancedTag);

// Function called when a dialog tag is selected.
function OnDialogTabChange(tabCode) {
	ShowE('divInfo', (tabCode == 'Info'));
	ShowE('divUpload', (tabCode == 'Upload'));
	ShowE('divAdvanced', (tabCode == 'Advanced'));
}

// Get the selected flash embed (if available).
var oFakeImage = dialog.Selection.GetSelectedElement();
var oEmbed;

if (oFakeImage) {
	if (oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash'))
		oEmbed = FCK.GetRealElement(oFakeImage);
	else
		oFakeImage = null;
}

window.onload = function() {
	// Translate the dialog box texts.
	oEditor.FCKLanguageManager.TranslatePage(document);

	// Load the selected element information (if any).
	LoadSelection();

	// Show/Hide the "Browse Server" button.
	GetE('tdBrowse').style.display = FCKConfig.FlashBrowser ? '' : 'none';

	// Set the actual uploader URL.
	if (FCKConfig.FlashUpload)
		GetE('frmUpload').action = FCKConfig.FlashUploadURL;

	dialog.SetAutoSize(true);

	// Activate the "OK" button.
	dialog.SetOkButton(true);

	SelectField('txtUrl');
}

function LoadSelection() {
	if (!oEmbed)
		return;

	GetE('txtUrl').value = GetAttribute(oEmbed, 'src', '');
	GetE('txtWidth').value = GetAttribute(oEmbed, 'width', '');
	GetE('txtHeight').value = GetAttribute(oEmbed, 'height', '');

	// Get Advances Attributes
	GetE('txtAttId').value = oEmbed.id;
	GetE('chkAutoPlay').checked = GetAttribute(oEmbed, 'play', 'true') == 'true';
	GetE('chkLoop').checked = GetAttribute(oEmbed, 'loop', 'true') == 'true';
	GetE('chkMenu').checked = GetAttribute(oEmbed, 'menu', 'true') == 'true';
	GetE('cmbScale').value = GetAttribute(oEmbed, 'scale', '').toLowerCase();

	GetE('txtAttTitle').value = oEmbed.title;

	if (oEditor.FCKBrowserInfo.IsIE) {
		GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '';
		GetE('txtAttStyle').value = oEmbed.style.cssText;
	} else {
		GetE('txtAttClasses').value = oEmbed.getAttribute('class', 2) || '';
		GetE('txtAttStyle').value = oEmbed.getAttribute('style', 2) || '';
	}

	UpdatePreview();
}

// #### The OK button was hit.
function Ok() {
	if (GetE('txtUrl').value.length == 0) {
		dialog.SetSelectedTab('Info');
		GetE('txtUrl').focus();

		alert(oEditor.FCKLang.DlgAlertUrl);

		return false;
	}

	oEditor.FCKUndo.SaveUndoStep();
	if (!oEmbed) {
		oEmbed = FCK.EditorDocument.createElement('EMBED');
		oFakeImage = null;
	}
	UpdateEmbed(oEmbed);

	if (!oFakeImage) {
		oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage('FCK__Flash',
				oEmbed);
		oFakeImage.setAttribute('_fckflash', 'true', 0);
		oFakeImage = FCK.InsertElement(oFakeImage);
	}

	oEditor.FCKEmbedAndObjectProcessor.RefreshView(oFakeImage, oEmbed);

	return true;
}

function UpdateEmbed(e) {
	if (WinPlayer(GetE('txtUrl').value) != null) {

		SetAttribute(e, 'type', 'application/x-mplayer2');

		SetAttribute(e, 'autostart', GetE('chkAutoPlay').checked ? 'true'
				: 'false');

	}

	if (RealPlayer(GetE('txtUrl').value) != null) {

		SetAttribute(e, 'type', 'audio/x-pn-realaudio-plugin');

		SetAttribute(e, 'autostart', GetE('chkAutoPlay').checked ? 'true'
				: 'false');

	}

	if (QuickTime(GetE('txtUrl').value) != null) {

		SetAttribute(e, 'type', 'video/quicktime');

		SetAttribute(e, 'autostart', GetE('chkAutoPlay').checked ? 'true'
				: 'false');

	}

	if (FlashPlayer(GetE('txtUrl').value) != null) {

		SetAttribute(e, 'type', 'application/x-shockwave-flash');

		SetAttribute(e,'pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash');

	}

	SetAttribute(e, 'src', GetE('txtUrl').value);
	SetAttribute(e, "width", GetE('txtWidth').value);
	SetAttribute(e, "height", GetE('txtHeight').value);

	// Advances Attributes

	SetAttribute(e, 'id', GetE('txtAttId').value);
	SetAttribute(e, 'scale', GetE('cmbScale').value);

	SetAttribute(e, 'autostart', GetE('chkAutoPlay').checked ? 'false' : 'true');
	SetAttribute(e, 'loop', GetE('chkLoop').checked ? 'false' : 'true');
	SetAttribute(e, 'menu', GetE('chkMenu').checked ? 'true' : 'false');

	SetAttribute(e, 'title', GetE('txtAttTitle').value);

	if (oEditor.FCKBrowserInfo.IsIE) {
		SetAttribute(e, 'className', GetE('txtAttClasses').value);
		e.style.cssText = GetE('txtAttStyle').value;
	} else {
		SetAttribute(e, 'class', GetE('txtAttClasses').value);
		SetAttribute(e, 'style', GetE('txtAttStyle').value);
	}
}

var ePreview;

function SetPreviewElement(previewEl) {
	ePreview = previewEl;

	if (GetE('txtUrl').value.length > 0)
		UpdatePreview();
}

function UpdatePreview() {
	if (!ePreview)
		return;

	while (ePreview.firstChild)
		ePreview.removeChild(ePreview.firstChild);

	if (GetE('txtUrl').value.length == 0)
		ePreview.innerHTML = '&nbsp;';
	else {
		var oDoc = ePreview.ownerDocument || ePreview.document;
		var e = oDoc.createElement('EMBED');

		SetAttribute(e, 'src', GetE('txtUrl').value);
		if (WinPlayer(GetE('txtUrl').value) != null) {

			SetAttribute(e, 'type', 'application/x-mplayer2');

		}

		if (RealPlayer(GetE('txtUrl').value) != null) {

			SetAttribute(e, 'type', 'audio/x-pn-realaudio-plugin');

		}

		if (QuickTime(GetE('txtUrl').value) != null) {

			SetAttribute(e, 'type', 'application/video/quicktime');

		}

		if (FlashPlayer(GetE('txtUrl').value) != null) {

			SetAttribute(e, 'type', 'application/x-shockwave-flash');

			SetAttribute(e, 'pluginspage',
					'http://www.macromedia.com/go/getflashplayer');

		}

		SetAttribute(e, 'width', '100%');
		SetAttribute(e, 'height', '100%');

		ePreview.appendChild(e);
	}
}

// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%"
// style="visibility:hidden" type="application/x-shockwave-flash"
// pluginspage="http://www.macromedia.com/go/getflashplayer">

function BrowseServer() {
	OpenFileBrowser(FCKConfig.FlashBrowserURL,
			FCKConfig.FlashBrowserWindowWidth,
			FCKConfig.FlashBrowserWindowHeight);
}

function SetUrl(url, width, height) {
	GetE('txtUrl').value = url;

	if (width)
		GetE('txtWidth').value = width;

	if (height)
		GetE('txtHeight').value = height;

	UpdatePreview();

	dialog.SetSelectedTab('Info');
}

function OnUploadCompleted(errorNumber, fileUrl, fileName, customMsg) {
	// Remove animation
	window.parent.Throbber.Hide();
	GetE('divUpload').style.display = '';

	switch (errorNumber) {
	case 0: // No errors
		alert('你的文件已成功上传');
		break;
	case 1: // Custom error
		alert(customMsg);
		return;
	case 101: // Custom warning
		alert(customMsg);
		break;
	case 201:
		alert('一个具有相同名称的文件已经存在。上传的文件已经被重命名为 "' + fileName + '"');
		break;
	case 202:
		alert('无效的文件类型');
		return;
	case 203:
		alert("安全错误.");
		return;
	case 500:
		alert('链接器禁用');
		break;
	default:
		alert('错误文件上传 ' + errorNumber);
		return;
	}

	SetUrl(fileUrl);
	GetE('frmUpload').reset();
}

var oUploadAllowedExtRegex = new RegExp(FCKConfig.FlashUploadAllowedExtensions,
		'i');
var oUploadDeniedExtRegex = new RegExp(FCKConfig.FlashUploadDeniedExtensions,
		'i');

function CheckUpload() {
	var sFile = GetE('txtUploadFile').value;

	if (sFile.length == 0) {
		alert('请选着文件上传');
		return false;
	}

	if ((FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex
			.test(sFile))
			|| (FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex
					.test(sFile))) {
		OnUploadCompleted(202);
		return false;
	}

	// Show animation
	window.parent.Throbber.Show(100);
	GetE('divUpload').style.display = 'none';

	return true;
}
